<?php

class SIM{
	var $image;
	var $imgType;

	private static $instance;
    
    private $connection;
 
    private function __construct() {}
    private function __clone() {}
    
 	
	/**
	 *
	 */
    public static function getInstance() {
    	
        if (!SIM::$instance instanceof self) {
        	
            SIM::$instance = new self();
            
        }
        
        return SIM::$instance;
    }

	public function load($filename){
		$image_info = getimagesize($filename);
		$this->imgType = $image_info[2];

		if($this->imgType == IMAGETYPE_JPEG){
			
			$this->image = imagecreatefromjpeg($filename);
		}elseif ($this->imgType == IMAGETYPE_GIF) {
			
			$this->image = imagecreatefromgif($filename);
		}elseif ($this->imgType == IMAGETYPE_PNG) {
			
			$this->image = imagecreatefrompng($filename);
		}
	}

	public function save($filename, $imgType=IMAGETYPE_JPEG, $compression= 75, $permissions=null){
		if( $imgType == IMAGETYPE_JPEG ){

			imagejpeg($this->image, $filename, $compression );
		}elseif ($imgType == IMAGETYPE_GIF) {
			
			imagegif($this->image, $filename, $compression );
		}elseif ($imgType == IMAGETYPE_PNG) {
			
			imagepng($this->image, $filename, $compression);
		}
		if ($permissions != null) {
			chmod($filename, $permissions);
		}
	}

	public function output($imgType = IMAGETYPE_JPEG){
		if ($imgType == IMAGETYPE_JPEG) {
			imagejpeg($this->image);
		}elseif ($imgType == IMAGETYPE_PNG) {
			imagepng($this->image);
		}elseif ($imgType == IMAGETYPE_GIF) {
			imagegif($this->image);
		}
	}
	
	public function getWidth(){
		return imagesx($this->image);
	}
	
	public function getHeight(){
		return imagesy($this->image);	
	}

	public function resizeToHeight($height){
		$ratio = $height / $this->getHeight();
		$width = $this->getWidth() * $ratio;
		$this->resize($width, $height);
	}

	public function resizeToWidth($width){
		$ratio = $width / $this->getWidth();
		$height = $this->getheight() * $ratio;
		$this->resize($width, $height);
	}

	public function scale($scale){
		$width = $this->getWidth() * $scale / 100;
		$height = $this->getHeight() * $scale / 100;
	}
	public function resize($width, $height){
		$new_image = imagecreatetruecolor($width, $height);
		imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
		$this->image = $new_image;
	}
}


?>